<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <script type="text/javascript" src="./lib/vue-2.4.0.js"></script>
    <style type="text/css">
      .ball {
        width: 15px;
        height: 15px;
        border-radius: 50%;
        background-color: #0094ff;
      }
    </style>
  </head>

  <body>
    <div id="app">
      <input type="button" value="加入购物车" @click="flag=!flag" />
      <transition
        @before-enter="beforeEnter"
        @enter="enter"
        @after-enter="afterEnter"
      >
        <div class="ball" v-show="flag"></div>
      </transition>
    </div>

    <script type="text/javascript">
      // 创建 Vue实例，得到 ViewModel
      var vm = new Vue({
        el: "#app",
        data: {
          flag: false
        },
        methods: {
          beforeEnter(el) {
            // 动画进入之前
            el.style.transform = "translate(0, 0)";
          },
          enter(el, done) {
            // 动画完成之后
            el.offsetWidth;
            el.style.transform = "translate(150px, 450px)";
            el.style.transition = "all 1s ease";
            done(); // 动画执行完调用
          },
          afterEnter(el) {
            // 最后做下相关处理工作
            // 这句话， 第一个功能，是控制小球的显示与隐藏
            // 第二个功能： 直接跳过后半场动画，让 flag 标识符 直接变为 false  让下次点击按钮永远是从前半场开始
            // 当第二次再点击 按钮的时候， flag  false  ->    true
            this.flag = !this.flag; // 这里相当于执行后半场动画  后半场没有钩子函数 就没有动画过渡效果
            // el.style.opacity = 0.5

            // Vue 把一个完整的动画，使用钩子函数，拆分为了两部分：
            // 我们使用 flag 标识符，来表示动画的切换；
            // 刚以开始，flag = false  ->   true   ->   false
            // 前半场 false => true  后半场 true => false
          }
        }
      });
    </script>
  </body>
</html>
